#ifndef __WED_PRINT_H__
#define __WED_PRINT_H__
#include <stdio.h>
#include <string.h>
#include <stdint.h>
#include <stdarg.h>
#include "Wed_framework_config.h"
#include "Wed_common.h"
#include "Wed_errno.h"
#include "dev/wed_dev.h"

/* \brief 普通信息打印 */
#if WED_INFO_PRINT_EN
#if WED_COLOR_PRINT_EN
#define WED_INFO_PRINT(fmt, args...)  \
    Wed_kprintf("\x1B[36m""[WED INFO] ""\x1B[37m"fmt"\r\n", ##args);
#else
#define WED_INFO_PRINT(fmt, args...)  \
    Wed_kprintf("[WED INFO] "fmt"\r\n", ##args);
#endif
#else
#define WED_INFO_PRINT_EN(fmt, args...)
#endif

/* \brief 调试信息打印 */
#if WED_DEBUG_PRINT_EN
#define WED_DEBUG_PRINT(fmt, args...)  \
    Wed_kprintf("\x1B[32m""[WED DEBUG %s:%d] ""\x1B[37m"fmt"\r\n", __FUNCTION__, __LINE__, ##args);
#else
#define WED_DEBUG_PRINT(fmt, args...)
#endif

/* \brief 错误信息打印 */
#if WED_ERR_PRINT_EN
#define WED_ERR_PRINT(fmt, args...)  \
    Wed_kprintf("\x1B[31m""[WED ERR %s:%d] ""\x1B[37m"fmt"\r\n", __FUNCTION__, __LINE__, ##args);
#else
#define WED_ERR_PRINT(fmt, args...)
#endif

/* \brief 警告信息打印 */
#if WED_WARN_PRINT_EN
#define WED_WARN_PRINT(fmt, args...)  \
    Wed_kprintf("\x1B[33m""[WED WARN %s:%d] ""\x1B[37m"fmt"\r\n", __FUNCTION__, __LINE__, ##args);
#else
#define WED_WARN_PRINT(fmt, args...)
#endif

/**
 * \brief 格式化输出函数
 *
 * @param p_buf 目标缓存地址
 * @param size  目标缓存大小
 * @param fmt   格式化字符串
 * @param args  可变参数列表
 *
 * @return 返回写入的字符数
 */
int Wed_vsnprintf(char          *p_buf,
                  unsigned long  size,
                  const char    *fmt,
                  va_list        args);
/**
 * \brief 打印函数
 *
 * @param fmt 打印内容
 */
void Wed_kprintf(const char *fmt, ...);
/**
 * \brief 打印函数
 *
 * @param fmt  打印内容
 * @param args 参数列表
 */
void Wed_vprintf(const char *fmt, va_list args);
/**
 * \brief 打印设备注册
 *
 * @param p_dev_name 设备名
 * @param p_cfg      设备配置
 *
 * @return 成功返回 0
 */
int Wed_print_dev_regsiter(char *p_dev_name);
/**
 * \brief 打印初始化
 *
 * @return 成功返回 0
 */
int Wed_print_init(void);
#endif

